package org.example.exampreparationtreasure.controller;

import org.example.exampreparationtreasure.model.entity.Categories;
import org.example.exampreparationtreasure.model.entity.Question;
import org.example.exampreparationtreasure.model.vo.CategoryTreeNode;
import org.example.exampreparationtreasure.service.CategoryService;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 分类相关接口。
 * <p>
 * 提供分类树获取、按父分类获取直接子分类/全部后代分类、以及按分类获取题目等 REST 接口。
 * 返回值统一为 {success, data} 结构，便于前端消费。
 * </p>
 */
@RestController
@RequestMapping("/api/categories")
public class CategoryController {

    private final CategoryService categoryService;

    public CategoryController(CategoryService categoryService) {
        this.categoryService = categoryService;
    }

    /**
     * 获取完整分类树。
     *
     * @return 根节点列表（每个节点的 children 递归包含其子孙节点）
     */
    @GetMapping("/tree")
    public ResponseEntity<Map<String, Object>> getTree() {
        List<CategoryTreeNode> tree = categoryService.getCategoryTree();
        Map<String, Object> body = new HashMap<>();
        body.put("success", true);
        body.put("data", tree);
        return ResponseEntity.ok(body);
    }

    /**
     * 获取某父分类的直接子分类（仅一层）。
     */
    @GetMapping("/{parentId}/children")
    public ResponseEntity<Map<String, Object>> getChildren(@PathVariable("parentId") Long parentId) {
        List<Categories> children = categoryService.getChildrenByParentId(parentId);
        Map<String, Object> body = new HashMap<>();
        body.put("success", true);
        body.put("data", children);
        return ResponseEntity.ok(body);
    }

    /**
     * 获取某父分类下的所有后代分类（扁平列表）。
     */
    @GetMapping("/{parentId}/descendants")
    public ResponseEntity<Map<String, Object>> getAllDescendants(@PathVariable("parentId") Long parentId) {
        List<Categories> descendants = categoryService.getAllDescendantsByParentId(parentId);
        Map<String, Object> body = new HashMap<>();
        body.put("success", true);
        body.put("data", descendants);
        return ResponseEntity.ok(body);
    }

    /**
     * 获取某分类下的题目（不递归）。
     */
    @GetMapping("/{categoryId}/questions")
    public ResponseEntity<Map<String, Object>> getQuestions(@PathVariable("categoryId") Long categoryId) {
        List<Question> questions = categoryService.getQuestionsByCategoryId(categoryId);
        Map<String, Object> body = new HashMap<>();
        body.put("success", true);
        body.put("data", questions);
        return ResponseEntity.ok(body);
    }

    /**
     * 获取某父分类下所有后代分类中的题目（聚合）。
     * 假设题目仅存在于叶子分类。
     */
    @GetMapping("/{parentId}/questions/all")
    public ResponseEntity<Map<String, Object>> getAllQuestions(@PathVariable("parentId") Long parentId) {
        List<Question> questions = categoryService.getAllQuestionsByParentCategoryId(parentId);
        Map<String, Object> body = new HashMap<>();
        body.put("success", true);
        body.put("data", questions);
        return ResponseEntity.ok(body);
    }
}


